1つのグローバルIPで複数VPCとVPN接続してみた#reinvent
はじめに
これまではこちらにあるように、 1つのカスタマーゲートウェイと複数のVPC間でVPN接続する際、 コネクションごと(=VPCごと)にグローバルIPアドレスが必要でした。
Additional Considerations IPSec requires that each VPN connection have a unique, publicly routable IP address. Therefore, a single customer gateway connecting to multiple VPCs requires a public IP address for each connection.
VPN機能がアップデートされ、カスタマーゲートウェイの同じIPアドレスを使いまわせるようになりました。 というわけで、実際に試してみました。
検証環境
EIPを1つだけ持つVyOSで、2つのVPCとVPN接続を行います。 VyOSを経由して、APサーバ間でpingの疎通が出来る状態にします。
手順
事前準備
図の通りにVPC,Subnet,APサーバを作成してください。
VyOS作成
VyOSのAMI(ami-d18cb2d0)を利用しました。 インスタンス作成後、EIPを付与してください。インスタンスにはvyosユーザで接続することが出来ます。
$ ssh -i [AMI作成時に指定した鍵].pem vyos@EIP
VPN接続セットアップ(VPC-A〜VPC-B)
まずは、VPC-AとVPC-B間でVPN接続を行います。 AWSコンソールからVPC画面を開きます。
カスタマーゲートウェイを作成します。 左メニュー[Customer Gateways]を押下し[Create Customer Gateway]を選択します。 IPアドレスはVyOSに割り当てたEIPを入力してください。
VirtualPrivateGatewayを作成します。 左メニュー[Virtual Private Gateways]を押下し[Create Virtual Private Gateway]を選択します。
作成後、[Attache to VPC]を選択し、VPC-Bにアタッチします。
VPN Connectionを作成します。 左メニュー[VPN Connections]を押下し[Create VPN Connection]を選択します。 VPGとCustomerGatewayは、先ほど作成したものを選択します。
VPN Connectionの作成にはしばらく時間がかかります。 作成完了後、[Download Configuration]を選択しVyOSに設定する内容をダウンロードします。
ダウンロードした設定のうち、下記行を変更します。 また、ダウンロードした設定には重複する箇所があるため重複箇所を削除します。 (同じ設定を投入すると、エラーメッセージが表示されます。)
◇ 変更前 set vpn ipsec site-to-site peer ***** local-address VyOSのEIP
◇ 変更後 set vpn ipsec site-to-site peer ***** local-address VyOSのプライベートIP
VyOS設定
・設定投入 VyOSにSSH接続後、configureコマンドを実行し用意しておいた設定をコピー&ペーストします。 「commit」コマンドにて、設定を反映します。
vyos@VyOS-AMI:~$ configure [edit] vyos@VyOS-AMI#
・送信元/送信先チェック無効化 こちらを参考に、送信元/送信先チェックを無効にします。
ap-aサーバ設定
ap-aサーバのルーティングテーブルを設定します。宛先VPC-BとVPC-Cについて、VyOSを設定します。 icmpが通るようにセキュリティグループも設定しておきます。
ap-bサーバ設定
ap-bが配置されているサブネットのルートテーブルの設定を行います。 ルートテーブルを選択し、[Route Propagation]タブを選択します。 Editを押下しルート伝達を有効化します。
ルートテーブルにVPG宛てのルーティングが追加されます。 icmpが通るようにセキュリティグループも設定しておきます。
VyOSバージョンアップ
以上の作業で、ap-aからap-b宛てのpingが通るはずです。 が、届きませんでした。。。 こちらの記事を確認させていただいたところ、VyOSの1.1.0と1.1.1にバグがあるとのことでした。
今回利用したAMIはバージョン1.1.0ということで、最新版へのバージョンアップを行いました。
vyos@VyOS-AMI:~$ add system image http://packages.vyos.net/iso/release/1.1.6/vyos-1.1.6-amd64.iso Trying to fetch ISO file from http://packages.vyos.net/iso/release/1.1.6/vyos-1.1.6-amd64.iso % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 234M 100 234M 0 0 1720k 0 0:02:19 0:02:19 --:--:-- 2603k ISO download succeeded. Checking for digital signature file... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 836 100 836 0 0 1414 0 --:--:-- --:--:-- --:--:-- 2714 Found it. Checking digital signature... gpg: directory `/root/.gnupg' created gpg: new configuration file `/root/.gnupg/gpg.conf' created gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run gpg: keyring `/root/.gnupg/pubring.gpg' created gpg: Signature made Mon Aug 17 05:00:14 2015 UTC using RSA key ID A442E6E9 gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: Good signature from "SO3 Group Maintainers <[email protected]>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: DD5B B405 35E7 F6E3 4278 1ABF B744 E25A A442 E6E9 Digital signature is valid. Checking MD5 checksums of files on the ISO image...OK. Done! What would you like to name this image? [VyOS-1.1.6]: OK. This image will be named: VyOS-1.1.6 Installing "VyOS-1.1.6" image. Copying new release files... Would you like to save the current configuration directory and config file? (Yes/No) [Yes]: Copying current configuration... Would you like to save the SSH host keys from your current configuration? (Yes/No) [Yes]: Copying SSH keys... Setting up grub configuration... Installing on VyOS AMI Done. vyos@VyOS-AMI:~$ show system image The system currently has the following image(s) installed: 1: VyOS-1.1.6 (default boot) 2: 1.1.0 (running image) vyos@VyOS-AMI:~$ reboot Proceed with reboot? (Yes/No) [No] y
バージョンアップ後、ping疎通OKとなりました。
VPN接続セットアップ(VPC-A〜VPC-C)
・Virtual Private Gatewayの作成 Virtual Private Gatewayを作成し、VPC−Cにアタッチします。
・VPN Connectionの作成 VPGは先ほど作成したものを選択します。 カスタマーゲートウェイは、1つ目のVPN接続に使用したものを選択します。
・コンフィグダウンロード コンフィグをダウンロードし、以下の通り変更します。 VyOSのEIPをVyOSのプライベートIPに置き換えます。 コンフィグ中のvti0をvti2に置き換えます。 コンフィグ中のvti1をvti3に置き換えます。 1つ目のVPN設定と重複する設定を削除します。
変更後、VyOSに設定を投入します。
・ap-cサーバ設定 ap-bと同様の設定を行います。
疎通試験
ap-aから、ap-bとap-cにpingを送信しました。
$ ifconfig | grep "inet addr" inet addr:192.168.1.189 Bcast:192.168.1.191 Mask:255.255.255.192 inet addr:127.0.0.1 Mask:255.0.0.0 $ ping 172.16.1.97 PING 172.16.1.97 (172.16.1.97) 56(84) bytes of data. 64 bytes from 172.16.1.97: icmp_seq=1 ttl=62 time=3.70 ms 64 bytes from 172.16.1.97: icmp_seq=2 ttl=62 time=3.54 ms ^C --- 172.16.1.97 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1444ms rtt min/avg/max/mdev = 3.540/3.623/3.707/0.102 ms $ ping 172.17.1.83 PING 172.17.1.83 (172.17.1.83) 56(84) bytes of data. 64 bytes from 172.17.1.83: icmp_seq=1 ttl=62 time=6.09 ms 64 bytes from 172.17.1.83: icmp_seq=2 ttl=62 time=5.28 ms ^C --- 172.17.1.83 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1963ms rtt min/avg/max/mdev = 5.287/5.690/6.093/0.403 ms $
おわりに
グローバルIPアドレスを複数用意する必要がなくなったことが確認できました。 オンプレミスではグローバルIPを気軽に増やすことは難しいと思いますので、とても便利になったと思います。